home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Brotikasten
/
BROTCD01.iso
/
c128
/
c32.d64
/
disk util.-40_80
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-08-08
|
5KB
|
142 lines
100 REM *******************************
110 REM
120 REM DISK UTILITIES
130 REM
140 REM BY: ROBERT W. BAKER
150 REM 15 WINDSOR DR, ATCO, NJ 08004
160 REM
170 REM *******************************
180 :
190 T$(0)="DEL":T$(1)="SEQ":T$(2)="PRG":T$(3)="USR":T$(4)="REL"
200 DM$(0)="SINGLE": DM$(1)="DOUBLE"
210 DIM A$(256): NL$=CHR$(0): Q$=CHR$(34): SP$=CHR$(160)
220 PRINT"[147] [176][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][174]"
230 PRINT " [194] DISK UTILITIES [194]"
240 PRINT " [173][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][189]"
250 CLOSE 2: CLOSE 4: CLOSE 15: OPEN 15,8,15
260 PRINT#15,"U0>M9": INPUT#15,EN
270 IF EN<>31 THEN DT=0: DM=0: PRINT SPC(11);"DISK DRIVE = 1541": GOTO 300
280 DT=1: PRINT#15,"U0>H0": INPUT#15,EN: DM=0: IF EN=31 THEN DM=1
290 PRINT"DISK DRIVE = 1571, IN ";DM$(DM);" SIDED MODE"
300 PRINT"[195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195]"
310 PRINT" 1 = NORMAL DIRECTORY (SIDE 1/2)"
320 PRINT" 2 = FULL DIRECTORY (DELETED FILES)"
330 PRINT" 3 = LOCK/UNLOCK FILE"
340 PRINT" 4 = CHANGE DISK NAME"
350 PRINT" 5 = ISSUE DISK COMMAND"
360 ML=5: AM=(DM+1) AND 1: IF DT=0 THEN PRINT: GOTO 390
370 PRINT" 6 = SWITCH DRIVE TO ";DM$(AM);" SIDED MODE": ML=6
380 PRINT SPC(22);"[163][163][163][163][163][163]"
390 PRINT" Q = QUIT"
400 PRINT"[195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195]"
410 PRINT"DESIRED FUNCTION: ";
420 GET C$: IF C$="" THEN 420
430 IF C$="Q" THEN PRINT C$: GOTO 1500
440 F=VAL(C$): IF F<1 OR F>ML THEN 420
450 PRINT C$: ON F GOTO 550,550,520,550,470
460 PRINT#15,"U0>M"+CHR$(48+AM): GOTO 220
470 PRINT"DESIRED DISK COMMAND (IN QUOTES):"
480 GOSUB 1490: IF X$=SP$ THEN 220
490 PRINT#15,X$: INPUT#15,EN,EM$,ET,ES
500 PRINT"ERROR#:";EN;" TRK/SEC:";ET;"/";ES
510 PRINT EM$: GOSUB 1450: GOTO 220
520 PRINT "FILENAME TO BE LOCKED/UNLOCKED:"
530 GOSUB 1490: IF X$=SP$ THEN 220
540 FL$=LEFT$(X$+"[160][160][160][160][160][160][160][160][160][160][160][160][160][160][160][160]",16): REM <-- 16 SHIFTED SPACES
550 PRINT#15,"I0": INPUT#15,EN,EM$,ET,ES: IF EN=0 THEN 580
560 IF EN<>21 AND ET<>18 AND ES<>0 THEN GOSUB 1440: GOTO 220
570 PRINT"PLEASE INSERT DISK & RESELECT FUNCTION!": GOTO 1130
580 OPEN2,8,2,"#0": GOSUB 1430: IF EN>0 THEN 220
590 PRINT "OK, READING BLOCK AVAIL MAP (BAM)..."
600 T=18: S=0: GOSUB 1300: IF EN>0 THEN 220
610 H1$="DISK "+Q$: FOR N=144 TO 159: H1$=H1$+A$(N): NEXT N
620 H1$=H1$+Q$+" ID="+A$(162)+A$(163)+" FMT="+A$(165)+A$(166)
630 C=0: FOR N=4 TO 140 STEP 4: IF N<>72 THEN C=C+ASC(A$(N))
640 NEXT N: IF ASC(A$(3))>0 THEN FOR N=221 TO 255: C=C+ASC(A$(N)): NEXT N
650 H2$=RIGHT$(" "+STR$(C),5)+" BLOCKS FREE ("
660 H2$=H2$+DM$(ASC(A$(3))/128)+" SIDED)"
670 PD=3: IF F>2 THEN 720
680 PRINT"PRINTED OUTPUT WANTED (Y/N): ";
690 GET C$: IF C$="N" THEN 720
700 IF C$<>"Y" THEN 690
710 PD=4: GOSUB 1220
720 OPEN 4,PD
730 GOSUB 1260: IF F<>4 THEN 830
740 PRINT"ENTER NEW DISK NAME FOR THIS DISK:"
750 GOSUB 1490: IF X$=SP$ THEN 1200
760 IF LEN(X$)>16 THEN PRINT"INPUT STRING IS LONGER THAN 16 CHARS!":GOTO 740
770 X$=LEFT$(X$+"[160][160][160][160][160][160][160][160][160][160][160][160][160][160][160][160]",16): REM <-- 16 SHIFTED SPACES
780 PRINT#15,"B-P:2,144": GOSUB 1430: IF EN>0 THEN 220
790 PRINT#2,X$;
800 PRINT#15,"U2:2,0,";T;S: GOSUB 1430: IF EN>0 THEN 220
810 PRINT#15,"I0"
820 PRINT" DISK BAM UPDATED WITH NEW DISK NAME": GOTO 1130
830 IF F=3 THEN PRINT"SEARCHING FOR FILE: ";Q$;FL$;Q$: PRINT
840 T=ASC(A$(0)): S=ASC(A$(1)): IF T>0 THEN 870
850 IF F=3 THEN PRINT SPC(12);"FILE NOT FOUND"
860 GOTO 1130
870 GOSUB 1300: IF EN>0 THEN 220
880 FOR N=2 TO 226 STEP 32: FT=ASC(A$(N)) AND 7
890 IF FT=0 AND F<>2 THEN 1190
900 C=ASC(A$(N+28))+(ASC(A$(N+29))*256)
910 IF C=0 THEN H=0: FOR X=3 TO 18: H=H+ASC(A$(N+X)): NEXT X: IF H=0 THEN 790
920 N$="": FOR Y=3 TO 18: N$=N$+A$(N+Y): NEXT Y
930 IF F=3 THEN IF FL$<>N$ THEN 1190
940 PRINT#4,RIGHT$(" "+STR$(C),5);" ";Q$;N$;
950 PRINT#4,Q$;" ";T$(FT);" ";: IF FT=0 THEN 1010
960 LK=0: IF (ASC(A$(N)) AND 192)=192 THEN PRINT#4,"(L)";: LK=1: GOTO 990
970 OP=0: IF (ASC(A$(N)) AND 128)=0 THEN PRINT#4,"(O)";: OP=1: GOTO 1010
980 PRINT#4," ";
990 PRINT#4," ";
1000 GOSUB 1330: IF EN>0 THEN 220
1010 PRINT#4: IF F<>3 THEN 1140
1020 IF OP=1 THEN PRINT"FILE IS NOT PROPERLY CLOSED!": GOTO 1130
1030 PRINT"OK TO ";: IF LK=1 THEN PRINT"UN";
1040 PRINT"LOCK FILE (Y/N): ";
1050 GET C$: IF C$="N" THEN 1210
1060 IF C$<>"Y" THEN 1050
1070 PRINT C$
1080 H=(ASC(A$(N)) AND 191): IF LK=0 THEN H=H+64
1090 PRINT#15,"B-P:2,";N: GOSUB 1430: IF EN>0 THEN 220
1100 PRINT#2,CHR$(H);
1110 PRINT#15,"U2:2,0,";T;S: GOSUB 1430: IF EN>0 THEN 220
1120 PRINT"DIRECTORY UPDATED WITH NEW LOCK STATUS"
1130 PRINT: GOSUB 1450: GOTO 220
1140 L=L-1: IF L=0 THEN GOSUB 1240: IF C$="Q" THEN 220
1150 IF PD=3 THEN 1190
1160 GET C$: IF C$="" THEN 1190
1170 PRINT SPC(10);"OUTPUT SUSPENDED": GOSUB 1460: IF C$="Q" THEN 220
1180 GOSUB 1220
1190 NEXT N: GOTO 840
1200 PRINT SPC(8);"NO CHANGE TO DISK NAME": GOTO 1130
1210 PRINT C$: PRINT SPC(8);"NO CHANGE TO DIRECTORY": GOTO 1130
1220 PRINT"[147]PRINTING DISK DIRECTORY"
1230 PRINT"PRESS ANY KEY TO PAUSE OUTPUT": RETURN
1240 IF PD=4 THEN FOR X=1 TO 10: PRINT#4: NEXT X: C$="": GOTO 1260
1250 GOSUB 1460: IF C$="Q" THEN RETURN
1260 L=50: IF PD=3 THEN L=16: PRINT"[147]";
1270 PRINT#4,H1$: PRINT#4: PRINT#4,H2$
1280 PRINT#4: PRINT#4,"---------------------------------------"
1290 PRINT#4: RETURN
1300 PRINT#15,"U1:2,0,";T;S: GOSUB 1430: IF EN>0 THEN RETURN
1310 FOR N=0 TO 255: GET#2,A$(N): IF A$(N)="" THEN A$(N)=NL$
1320 NEXT N: RETURN
1330 EN=0: IF F=3 THEN RETURN
1340 T=ASC(A$(N+1)): S=ASC(A$(N+2)): GOSUB 1370
1350 IF (EN+H)>0 OR FT<>4 THEN RETURN
1360 T=ASC(A$(N+19)): S=ASC(A$(N+20))
1370 H=0: IF T>35 THEN H=1: PRINT#4,"(2)";: RETURN
1380 PRINT#15,"U1:2,0,";T;S: GOSUB 1430: IF EN>0 THEN RETURN
1390 GET#2,C$,D$: IF C$="" THEN C$=NL$
1400 IF D$="" THEN D$=NL$
1410 T=ASC(C$): S=ASC(D$): IF T>0 THEN 1370
1420 RETURN
1430 INPUT#15,EN,EM$,ET,ES: IF EN=0 THEN RETURN
1440 PRINT: PRINT"DISK ERROR:[146]";EN;" TRK/SEC:[146]";ET;"/";ES: PRINT EM$
1450 PRINT" PRESS ANY KEY TO CONTINUE ": GOTO 1470
1460 PRINT"PRESS ANY KEY TO CONTINUE, 'Q' TO QUIT[146]";
1470 GET C$: IF C$="" THEN 1470
1480 RETURN
1490 PRINT"";SP$;"[157][157][157]";: INPUT X$: RETURN
1500 CLOSE 2: CLOSE 4: CLOSE 15